package jp.co.dailyReport.customer.action;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import jp.co.dailyReport.DataUnavailableException;
import jp.co.dailyReport.customer.Customer;
import jp.co.dailyReport.customer.CustomerManager;
import jp.co.dailyReport.staff.Staff;
import jp.co.dailyReport.PermissionException;

/**
 * 取引先情報編集ページのボタン（戻る、更新）
 * が押されたときの処理を管理するクラスです。
 */
public class CustomerEditAction extends Action {

	private static Logger log = Logger.getLogger(CustomerEditAction.class);

	/**
	 * 取引先情報編集ページで押されるボタン（戻る、更新）
	 * によって、実行する処理を制御します。<BR><BR>
	 * 「戻る」ボタンが押された場合の処理：<BR>
	 * 取引先情報をDBから取得します。<BR><BR>
	 * 「更新」ボタンが押された場合の処理：<BR>
	 * 入力チェックを行い、OKならば取引先情報をDBから更新します。
	 * 取引先IDから取引先情報を取得します。<BR>
	 * 
	 * 
	 * @param mapping このインスタンスを選択するために使用したActionMapping
	 * @param form 存在するならば、このリクエストのためのActionForm Bean
	 * @param request 処理しているHTTPリクエスト
	 * @param response 処理しているHTTPレスポンス
	 * @return ActionForwardインスタンス
	 * @throws IOException, ServletException
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
	 throws IOException, ServletException {

		log.debug("CustomerEditAction start");
		HttpSession session = request.getSession();
		ActionErrors errors = new ActionErrors();
		String target = null;
		if(request.getParameter("edit") != null) {
			target = "edit";
			customerEdit(form, request, errors);
		} else if(request.getParameter("returnList") != null) {
			target = "returnList";
			customerReturnList(form, request, errors);
		}

		if (!errors.isEmpty()){
			saveErrors(request,errors);
		}

		log.debug("CustomerEditAction end");
		return mapping.findForward(target);
	}

	private void customerEdit(ActionForm form, HttpServletRequest request, ActionErrors errors) {

		HttpSession session = request.getSession();
		log.debug("session.getId() = " + session.getId());
		Staff staff = (Staff)session.getAttribute("LoginStaff");
		CustomerActionForm customerActionForm = (CustomerActionForm)form;
		Customer customer = new Customer();
		customer.setCustomerId(customerActionForm.getCustomerId());
		customer.setName(customerActionForm.getName());

		try {
			if (request.getParameter("name") == null || request.getParameter("name").length() == 0){
				errors.add("customerName",new ActionError("errors.customerName.required"));
			} else {
				CustomerManager.update(staff,customer);
			}
			customer = CustomerManager.load(customer.getCustomerId());
			customerActionForm.setCustomerId(customer.getCustomerId());
			customerActionForm.setName(customer.getName());
		} catch(DataUnavailableException due) {
			log.error(due.getMessage());
		} catch(PermissionException pe) {
			log.error(pe.getMessage());
		}
	}

	private void customerReturnList(ActionForm form, HttpServletRequest request, ActionErrors errors) {

		HttpSession session = request.getSession();
		CustomerActionForm customerActionForm = (CustomerActionForm)form;
		Customer customerList[] = null;

		try {
			customerList = CustomerManager.load();
		} catch(DataUnavailableException due) {
			log.error(due.getMessage());
		}
		request.setAttribute("customerList", customerList);
	}

}
